package test.leecode;

import com.alibaba.fastjson.JSON;

import test.leecode.bean.ListNode;

/**
 * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 * 提示：
 * 每个链表中的节点数在范围 [1, 100] 内
 * 0 <= Node.val <= 9
 * 题目数据保证列表表示的数字不含前导零
 */

public class L02AddTwoNumbers {


  public static void main(String[] args) {
    ListNode l1 = ListNode.arrayListNode(new int[]{2,4,3});
    ListNode l2 = ListNode.arrayListNode(new int[]{5,6,4});
    System.out.println(JSON.toJSONString(addTwoNumber(l1,l2)));
  }

  public static ListNode addTwoNumber(ListNode l1,ListNode l2) {
    int carry = 0;
    ListNode result = null;
    ListNode temp = null;
    while(l1!=null || l2!=null) {
      int l1v = l1!=null?l1.val :0;
      int l2v = l2!=null?l2.val :0;
      int sum = l1v + carry + l2v;
      //判断是否有进位
      carry = sum>=10?1:0;
      int v = sum%10;
      if(result==null) {
        result =  new ListNode(v);
      }else{
        if(result.next==null) {
          result.next = new ListNode(v);
          temp = result.next;
        }else{
          temp.next = new ListNode(v);
          temp = temp.next;
        }
      }
      l1 = l1!=null?l1.next:null;
      l2 = l2!=null?l2.next:null;
    }
    if(carry==1) {
      if(temp==null ) {
        result.next = new ListNode(1);
      }else {
        temp.next = new ListNode(1);
      }
    }
    return result;
  }

}


